package 双指针;

class 无重复字符的最长子串 {
    public int lengthOfLongestSubstring(String s) {
        
        int[] count=new int[10000];
        //左闭右闭[l...r]
        int l=0;
        int r=0;
        String res="";
        String tmp="";
        for(;r<s.length();r++){//右边界
            count[s.charAt(r)]++;
            if(count[s.charAt(r)]>1){
                tmp=s.substring(l,r);//substr是左闭右开的
                if(tmp.length()>res.length()){
                    res=tmp;
                }
                while(l<r&&count[s.charAt(r)]>1){
                    //更新左边界，并减少对应的count[]
                    count[s.charAt(l++)]--;
                }
            }
        }

        //最后一次的substring没有参与比较，因为每次比较都是需要先遇到count[i]>1才能进行比较的，最后一次如果没有遇到count[i]>1，则不会进行比较，所以这里要补回来
        tmp=s.substring(l,r);//substr是左闭右开的
        if(tmp.length()>res.length()){
            res=tmp;
        }

        return res.length();
    }
}